package cn.edu.hunau.java.week01.day04;

import org.junit.Test;

import java.util.Arrays;
import java.util.Random;

public class ArraySortTest {
    @Test
    public void testArraySort(){
        int[] arr=randomArray(20,100);
        System.out.println("排序前:"+Arrays.toString(arr));
        selectSort(arr);
        System.out.println("排序后:"+Arrays.toString(arr));
    }

    public void selectSort(int[] arr) {
        for(int i=0;i<arr.length-1;i++){
            for(int j=i+1;j<arr.length;j++){
                if(arr[j]<arr[i]){
                    swap(arr,i,j);
                }
            }
            System.out.println("\t第"+(i+1)+"轮排序:"+Arrays.toString(arr));
        }
    }
    public void swap(int[] arr,int i,int j){
        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
    public int [] randomArray(int length,int bound) {
        int[] result = new int[length];
        //声明一个标记数组标记数据是否存在
        //随机范围[1,33]那么如果数据为33,flags[33],需要设置为true
        boolean[] flags =new boolean[bound+1];
        Random r = new Random();
        for (int i = 0; i < length; i++) {
            int temp = r.nextInt(bound) + 1;
            //判断temp是否已经被标记
            if(flags[temp]){//如果为true，表示该数据已经存在
                i--;//重新对i进行计算
            }else{
                result[i]=temp;
                //标记该数据的存在
                flags[temp]=true;
            }
        }
        return result;
    }
}
